import sqlite3
import datetime
import random
import os

# 数据库路径
DB_PATH = "tts_feedback.db"

# 检查并删除已存在的数据库文件（仅用于测试）
if os.path.exists(DB_PATH):
    os.remove(DB_PATH)

# 连接到SQLite数据库（如果不存在则会创建）
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()

# 创建feedback表
cursor.execute('''
CREATE TABLE IF NOT EXISTS feedback (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    text_id TEXT NOT NULL,
    rating INTEGER NOT NULL,
    content TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')

# 创建access_log表
cursor.execute('''
CREATE TABLE IF NOT EXISTS access_log (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    ip TEXT NOT NULL,
    text TEXT NOT NULL,
    voice TEXT NOT NULL,
    speed REAL NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')

# 提交创建表的操作
conn.commit()

# 生成测试数据
print("正在生成测试数据...")

# 测试文本样本
sample_texts = [
    "Kokoro 是一系列体积虽小但功能强大的 TTS 模型。该模型是经过短期训练的结果。",
    "欢迎使用 Kokoro TTS 服务，这是一个高效的文本转语音系统。",
    "语音合成技术正在快速发展，为用户提供更自然的听觉体验。",
    "通过 API 调用，您可以轻松将文本转换为高质量的语音。",
    "支持多种音色和语速调整，满足不同场景的需求。"
]

# 测试IP样本
sample_ips = [
    "192.168.1.101", "192.168.1.102", "192.168.1.103",
    "10.0.0.1", "10.0.0.2", "127.0.0.1"
]

# 测试音色
sample_voices = ["zf_001", "zm_010"]

# 测试反馈内容
sample_feedbacks = [
    "音色很自然，非常喜欢",
    "语速适中，听起来很舒服",
    "语音质量不错，但有些词语的发音不够准确",
    "希望能有更多音色选择",
    "整体效果很好，继续加油",
    "合成速度很快，用户体验不错",
    "情感表达不够丰富",
    "音量有点小，需要调整"
]

# 生成访问日志数据
for i in range(50):  # 生成50条访问日志
    text = random.choice(sample_texts)
    ip = random.choice(sample_ips)
    voice = random.choice(sample_voices)
    speed = round(random.uniform(0.8, 1.5), 1)
    # 随机生成过去7天内的时间
    days_ago = random.randint(0, 6)
    hours_ago = random.randint(0, 23)
    minutes_ago = random.randint(0, 59)
    created_at = (datetime.datetime.now() - 
                  datetime.timedelta(days=days_ago, hours=hours_ago, minutes=minutes_ago)).strftime('%Y-%m-%d %H:%M:%S')
    
    cursor.execute(
        "INSERT INTO access_log (ip, text, voice, speed, created_at) VALUES (?, ?, ?, ?, ?)",
        (ip, text, voice, speed, created_at)
    )

# 为部分访问日志生成反馈数据
# 首先获取所有访问日志的id
cursor.execute("SELECT id, text FROM access_log")
access_logs = cursor.fetchall()

# 为30%的访问日志生成反馈
for log_id, text in access_logs:
    if random.random() < 0.3:
        text_id = f"text_{log_id}"
        rating = random.choice([1, 0])  # 1表示点赞，0表示点踩
        content = random.choice(sample_feedbacks) if random.random() < 0.7 else None
        # 随机生成访问后的时间（5-30分钟后）
        created_at = (datetime.datetime.now() - 
                      datetime.timedelta(minutes=random.randint(5, 30))).strftime('%Y-%m-%d %H:%M:%S')
        
        cursor.execute(
            "INSERT INTO feedback (text_id, rating, content, created_at) VALUES (?, ?, ?, ?)",
            (text_id, rating, content, created_at)
        )

# 提交所有数据
conn.commit()

# 统计生成的数据量
cursor.execute("SELECT COUNT(*) FROM access_log")
access_count = cursor.fetchone()[0]

cursor.execute("SELECT COUNT(*) FROM feedback WHERE rating = 1")
likes_count = cursor.fetchone()[0]

cursor.execute("SELECT COUNT(*) FROM feedback WHERE rating = 0")
dislikes_count = cursor.fetchone()[0]

# 关闭连接
conn.close()

# 输出结果
print(f"测试数据生成完成！")
print(f"访问记录: {access_count} 条")
print(f"点赞反馈: {likes_count} 条")
print(f"点踩反馈: {dislikes_count} 条")
print(f"数据库文件已创建: {DB_PATH}")
print("\n请运行以下命令启动服务：")
print("cd /Users/harrison/cszx/codes/Kokoro-82M-v1.1-zh/samples")
print("python server.py")
print("\n然后在浏览器中访问：")
print("http://localhost:8000/admin.html")